<?php

define('menu_module', "menu");              // 定义该模块名称
define('menu_name', "菜单");                 // 定义模块中文
define('MENU_ACTION_SAVE', 'save');         // 定义保存菜单
define('MENU_ACTION_RELEASE', 'release');   // 定义发布菜单
define('MENU_ACTION_STOP', 'stop');         // 定义停用菜单

/**
 * 自定义菜单
 * Class MenuAction
 * @modify lilei<LL_strive@163.com> 2017-07-10
 */
class MenuAction extends Action {

    /**
     * 获得已配置的菜单列表
     *
     * @param string $name      菜单名称筛选
     * @param int    $start
     * @param int    $limit
     * @param int    $mediaId
     */
    public function menuList($name = '', $start = 0, $limit = 10, $mediaId = 0)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 实例化数据Model */
        $customerId = Session::$user["customerId"];
        $groupMenu = D("user_group_menu");

        /** 3. 筛选条件 */
        $condition = [];
        $condition['a.mediaId']   = $mediaId;     // 默认mediaId都为0
        isset($name) && $name ? $condition['a.name'] = array('like', '%' . $name . '%') : '';

        /** 4. 查询数据 */
        $result = $groupMenu->alias("a")
            ->join("left join wx_" . $customerId . "_user_weixin_group b on (b.group_id=a.groupIds and a.mediaId=b.mediaId)")
            ->field('a.*,b.group_name as groupname')
            ->where($condition)
            ->order('a.isDefault desc')
            ->group("a.id")
            ->limit($start, $limit)
            ->select();
        $count = $groupMenu->alias("a")
            ->join("left join wx_" . $customerId . "_user_weixin_group b on b.group_id=a.groupIds and a.mediaId=b.mediaId")
            ->field('a.*,b.group_name as groupname')
            ->where($condition)
            ->order('a.isDefault desc')
            ->group("a.id")
            ->limit($start, $limit)
            ->select();
	$count = count($count);
        /** 5. 返回 */
        if ($count) {   // 数据正常
            Output::instance()->objArray($result, $count);
        } else {
            Output::instance()->resultCode();
        }

    }

    /**
     * 添加/设置菜单
     *
     * @param        $menu          菜单json字符串
     * @param        $groupsign     这个菜单的名称
     * @param null   $groupIds      groupid值(分组的id)
     * @param int    $isDefault     是否默认: 1-默认/0-非默认, 默认值是0, 只能有一个默认. 由于设置默认接口已独立出去, 这里建议不传
     * @param null   $id            // 修改时, 修改的菜单的id
     * @param null   $materialId    // 修改时, 修改的菜单的素材的id
     * @param string $action        操作状态save/release/stop，保存/发布/停用，发布＝保存＋微信创建菜单
     * @param int    $mediaId
     */
    public function set($menu, $groupsign, $groupIds = null, $isDefault = 0, $id = null, $materialId = null, $action = MENU_ACTION_RELEASE, $mediaId = 0)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 操作行为判断 */
        if (strcasecmp(trim($action), MENU_ACTION_RELEASE) == 0
            || strcasecmp(trim($action), MENU_ACTION_SAVE) == 0
        ) { // 发布或者保存: release-发布/save-保存
            /** 3. 实例化数据模型 */
            $groupmenu = D("user_group_menu");

            /** 4. 数据处理 */
            /** 4.1 默认菜单处理 */
            // 分组菜单限制
            $defaultMenu = $groupmenu->where(['mediaId' => $mediaId, 'isDefault' => 1])->find();
            if ($isDefault && $id != $defaultMenu['id']) {  // 如果已存在默认菜单, 则不可以再创建默认菜单
                if ($defaultMenu) {
                    Output::instance()->resultCode(1, '已存在默认菜单');
                    return;
                }
            }
            if (!$defaultMenu && !$isDefault) {     // 如果尚没有默认菜单, 则需先创建默认菜单
                Output::instance()->resultCode(1, '请先创建默认菜单');
                return;
            }

            // 菜单数据存入数据表
            $this->saveMenuToDb($menu);
            // 菜单存入素材表
            $materialId = $this->saveMenuToMaterial($menu, $materialId);
            // 菜单存入wx_X_user_group_menu表
            $data['mediaId'] = $mediaId;
            $data['name'] = $groupsign;
            $data['groupIds'] = $groupIds;
            $data['isDefault'] = $isDefault;
            $data['isRelease'] = 0;
            $data['materialId'] = $materialId;
            $data['updateTime'] = date("Y-m-d H:i:s");
            if ($id) {
                $groupmenu->where("id=$id")->save($data);

                $groupmenu_sql = $groupmenu->getLastSql();
                R('Log/add', array('indmediaManagement', '139', '自媒体管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中修改了id为: ' . $id . '的菜单'));

            } else {
                $data['createTime'] = date("Y-m-d H:i:s");
                $groupmenu->add($data);

                $groupmenu_sql = $groupmenu->getLastSql();
                R('Log/add', array('indmediaManagement', '139', '自媒体管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中新增了一个菜单'));

            }
            // weixin api create menu
//			if (strcasecmp(trim($action), MENU_ACTION_RELEASE) == 0) {
//				$result = WeixinApi::createMenu($menu);
//				if (!$result) {
//					return;
//				}
//			}
//			R('Log/add', array(module_handle_menu, NULL, op_update, $menu));
            Output::instance()->resultCode();
        } else if (strcasecmp(trim($action), MENU_ACTION_STOP) == 0) {  // stop-停用
            // 删除菜单
            $result = $this->deleteMenu($mediaId);
            if (!$result) {
                return;
            }
            Output::instance()->resultCode();
        } else {    // 系统有错误
            Output::instance()->resultCode(code_system_error);
        }
    }

    /**
     * 获得id指定的菜单的信息, 进行编辑
     *
     * @param $id
     * @return mixed
     */
    public function get($id)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        // 获取菜单状态已经判断该设置，该处屏蔽
//        $isSetUserAppId = WeixinApi::isSetUserAppId();
//        if (!$isSetUserAppId) {
//            return;
//        }

        /** 2. 实例化数据Model */
        $menugroup = D('user_group_menu');

        /** 3. 查询这个菜单 */
        // 菜单配置信息
        $menuInfo = $menugroup->where('id=' . $id)->find();
        // 菜单素材信息(menu同时作为返回数据)
        $menu = $this->getMenu($menuInfo['materialId']);
        // 在下面继续拼接menu数据
        if ($menuInfo['name']) {    // 菜单名称
            $menu->name = $menuInfo['name'];
        }
        if ($menuInfo['isDefault']) {   // 菜单默认状态
            $menu->isDefault = $menuInfo['isDefault'];
        }
        if ($menuInfo['groupIds']) {    // 菜单分组
            $menu->groupIds = $menuInfo['groupIds'];
        }
        if ($menuInfo['materialId']) {      // 菜单素材id
            $menu->materialId = $menuInfo['materialId'];
        }

        /** 4. 返回菜单信息 */
        if (isset($menu)) {
            Output::instance()->object($menu);
        } else {
            Output::instance()->resultCode(code_success);
        }
    }

    /**
     * 根据id发布菜单
     *
     * @param $id   要发布的菜单的id
     * @param int    $mediaId
     */
    public function releaseById($id, $mediaId = 0)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 实例化数据Model */
        $customerId = Session::$user["customerId"];
        $groupmenu = D("user_group_menu");

        /** 3. 根据要发布的id, 查询数据 */
        $menuInfo = $groupmenu->alias("a")
            ->join("inner join wx_" . $customerId . "_material b on a.materialId = b.id")
            ->where("a.id=$id")
            ->field("a.*,b.xml")
            ->find();
        /** 3.1 查询默认菜单 */
        $defaultMenu = $groupmenu->where(['mediaId' => $mediaId, 'isDefault' => 1])->find();
        // 判断默认菜单的发布情况
        if ($menuInfo['isDefault'] == 0 && $defaultMenu['isRelease'] == 0) {    // 如果当前菜单不是默认菜单, 并且默认菜单尚未发布, 则需要先发布默认菜单
            Output::instance()->resultCode(1, '需要先发布默认菜单');
            return;
        }

        /** 4. 与微信交互, 调用微信接口, 设置公众号菜单 */
        $materialObj = simplexml_load_string($menuInfo['xml'], 'SimpleXMLElement', LIBXML_NOCDATA);
        $menu = (String)$materialObj->json;
        if ($menuInfo['isDefault'] != 1) {  // 如果不是默认菜单, 说明已经有菜单了, 则添加
            $result = WeixinApi::addconditional($menu, $mediaId);
            $result = json_decode($result, true);
            if ($result['errcode']) {
                Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
                return;
            }
        } else {    // 如果尚没有默认菜单, 则创建菜单
            $result = WeixinApi::createMenu($menu, $mediaId);
            $result = json_decode($result, true);
            if ($result['errcode']) {
                Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
                return;
            }
        }

        /** 5. 修改本地发布状态 */
        $data['isRelease'] = 1;     // 设置发布状态为已发布
        $data['menuId'] = $result['menuid'];    // 添加menuid
        $data['updateTime'] = date("Y-m-d H:i:s");
        $relResult = $groupmenu->where("id=" . $id)->save($data);

        $groupmenu_sql = $groupmenu->getLastSql();
        R('Log/add', array('indmediaManagement', '139', '菜单管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中发布了id为: ' . $id . '的菜单'));

        /** 6. 返回 */
        if ($relResult != false) {
            Output::instance()->resultCode();
        } else {
            Output::instance()->resultCode(code_system_error);
        }
    }

    /**
     * 将某个菜单设置为默认菜单
     *
     * @param $id
     * @param int $mediaId
     */
    public function setDefault($id, $mediaId = 0)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 实例化数据Model */
        $customerId = Session::$user["customerId"];
        $groupmenu = D("user_group_menu");

        /** 3. 查询菜单数据 */
        $groupInfo = $groupmenu->alias("a")
            ->join("inner join wx_" . $customerId . "_material b on a.materialId = b.id")
            ->where("a.id=$id")
            ->field("a.*,b.xml")
            ->order("a.isDefault desc")
            ->find();
        $groupmenu->where(['id' => $id])->save(['groupIds' => '']);

        $materialObj = simplexml_load_string($groupInfo['xml'], 'SimpleXMLElement', LIBXML_NOCDATA);
        $menu = (String)$materialObj->json;
        /** 发布新的默认菜单时时, 会先停用已发布的默认菜单, 在新发布一个默认菜单 */
        $result = WeixinApi::delconditional($groupInfo['menuId'], $mediaId);
        $result = json_decode($result, true);
        if ($result['errcode']) {
            Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
            return;
        } else {
            // 创建新的默认菜单
            $result = WeixinApi::createMenu($menu, $mediaId);
            $result = json_decode($result, true);
            if ($result['errcode']) {
                Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
                return;
            } else {
                $data['updateTime'] = date("Y-m-d H:i:s");
                $data['isDefault'] = 0;
                $data['isRelease'] = 0;
                $groupmenu->where("isDefault=1")->save($data);  // 将已发布的默认菜单停用, 并且设为非默认
                $data['isDefault'] = 1;
                $data['isRelease'] = 1;
                $groupmenu->where("id=$id")->save($data);       // 再将新的菜单设置为默认

                $groupmenu_sql = $groupmenu->getLastSql();
                R('Log/add', array('indmediaManagement', '139', '菜单管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中修改了id为: ' . $id . '的菜单为默认菜单'));

                Output::instance()->resultCode();
            }
        }

    }

    /**
     * 全部发布(发布所有已设置的菜单)
     *
     * @param int $mediaId
     */
    public function release($mediaId = 0)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 实例化数据Model */
        $customerId = Session::$user["customerId"];
        $groupmenu = D("user_group_menu");

        /** 3. 查询菜单列表数据 */
        $where['a.mediaId'] = $mediaId;
        $menulist = $groupmenu->alias("a")
            ->join("inner join wx_" . $customerId . "_material b on a.materialId = b.id")
            ->field("a.*,b.xml")
            ->where($where)
            ->order("a.isDefault desc")
            ->select();

        /** 3.1 发布全部菜单, 先删除wx上所有菜单 */
        WeixinApi::deleteMenu($mediaId);
        foreach ($menulist as $key => $value) {
            $materialObj = simplexml_load_string($value['xml'], 'SimpleXMLElement', LIBXML_NOCDATA);
            $menu = (String)$materialObj->json;
            if ($value['isDefault']) {  // 如果是默认菜单, 逻辑上, 在此之前还没有菜单, 所以先创建菜单
                $result = WeixinApi::createMenu($menu, $mediaId);
                $result = json_decode($result, true);
                if ($result['errcode']) {
                    Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
                    return;
                } else {
                    $data['isRelease'] = 1;
                    $data['updateTime'] = date("Y-m-d H:i:s");
                    $groupmenu->where("id=" . $value['id'])->save($data);   // 修改这个默认菜单的发布状态
                }
            } else {    // 如果不是默认菜单, 则添加个性菜单
                $result = WeixinApi::addconditional($menu);
                $result = json_decode($result, true);
                if ($result['errcode']) {
                    Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
                    return;
                } else {
                    $data['isRelease'] = 1;
                    $data['menuId'] = $result['menuid'];    // 个性菜单有menuid
                    $data['updateTime'] = date("Y-m-d H:i:s");
                    $groupmenu->where("id=" . $value['id'])->save($data);
                }
            }
        }

        $groupmenu_sql = $groupmenu->getLastSql();
        R('Log/add', array('indmediaManagement', '139', '菜单管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中发布了所有菜单'));

        Output::instance()->resultCode();
    }

    /**
     * 根据id停用指定菜单
     *
     * @param $id
     * @param int $mediaId
     */
    public function stopMenu($id, $mediaId)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 实例化数据Model */
        $customerId = Session::$user["customerId"];
        $groupmenu = D("user_group_menu");

        // 查询要停用的菜单
        $groupInfo = $groupmenu->where("id=$id")->find();

        if ($groupInfo['isDefault']) {  // 如果是默认菜单被停用, 则删除所有已发布的菜单
            $result = WeixinApi::deleteMenu($mediaId);  // 删除所有已发布的菜单
            $result = json_decode($result, true);
            if ($result['errcode']) {
                Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
                return;
            } else {
                $data['updateTime'] = date("Y-m-d H:i:s");
                $data['isRelease'] = 0;
                $result = $groupmenu->where("isRelease=1")->save($data);    // 取消所有已发布的菜单的发布状态

                $groupmenu_sql = $groupmenu->getLastSql();
                R('Log/add', array('indmediaManagement', '139', '菜单管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中停用了所有菜单'));

                if ($result !== false) {
                    Output::instance()->resultCode();
                } else {
                    Output::instance()->resultCode(code_system_error);
                }
            }
        } else {    // 如果不是默认菜单, 则单独删除wx上的这个菜单, 并且本地停用
            $result = WeixinApi::delconditional($groupInfo['menuId'], $mediaId);      // 根据menuId删除wx上该个性化菜单
            $result = json_decode($result, true);
            if ($result['errcode']) {
                Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
                return;
            } else {
                $data['updateTime'] = date("Y-m-d H:i:s");
                $data['isRelease'] = 0;
                $result = $groupmenu->where("id=$id")->save($data);     // 取消被停用的菜单的发布状态

                $groupmenu_sql = $groupmenu->getLastSql();
                R('Log/add', array('indmediaManagement', '139', '菜单管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中停用了id为: ' . $id . '的菜单'));

                if ($result !== false) {
                    Output::instance()->resultCode();
                } else {
                    Output::instance()->resultCode(code_system_error);
                }
            }
        }
    }

    /**
     * 根据id删除指定菜单(点击删除)
     *
     * @param $id
     * @param int $mediaId
     */
    public function delMenu($id, $mediaId = 0)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 实例化数据Model */
        $groupMenu = D("user_group_menu");

        /** 3. 查询这个要被删除的菜单信息 */
        $condition['id'] = array('eq', $id);
        $MenuInfo = $groupMenu->where($condition)->find();

        if ($MenuInfo['isRelease']) {       // 如果菜单已经被发布了, 则先停用
            $menuId = $MenuInfo['menuId'];
            $result = WeixinApi::delconditional($menuId, $mediaId);   // 停用该菜单
            $result = json_decode($result, true);
            if ($result['errcode']) {
                Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
            } else {
                $this->deleteMenuMaterial($MenuInfo['materialId']);     // 先将素材表里的菜单素材软删
                $groupResult = $groupMenu->where($condition)->delete(); // 然后删除本地数据表里该菜单

                $groupmenu_sql = $groupMenu->getLastSql();
                R('Log/add', array('indmediaManagement', '139', '菜单管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中删除了id为: ' . $id . '的菜单'));

                if ($groupResult != false) {
                    Output::instance()->resultCode(code_success);
                } else {
                    Output::instance()->resultCode(code_sql_error);
                }
            }
        } else {    // 如果该菜单没被发布, 直接删除
            $this->deleteMenuMaterial($MenuInfo['materialId']);     // 先将素材表里的菜单素材软删
            $groupResult = $groupMenu->where($condition)->delete();

            $groupmenu_sql = $groupMenu->getLastSql();
            R('Log/add', array('indmediaManagement', '139', '菜单管理', op_update, $groupmenu_sql, $this->getLoginName() . '在自媒体菜单管理中删除了id为: ' . $id . '的菜单'));

            if ($groupResult != false) {
                Output::instance()->resultCode(code_success);
            } else {
                Output::instance()->resultCode(code_sql_error);
            }
        }

    }


    /** ***************************************************************  */


    /**
     * 获得已经发布到wx上的菜单信息
     *
     * @param int $mediaId
     */
    public function getMenuStatus($mediaId = 0)
    {
        /** 1. 判断登录 */
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }

        /** 2. 向微信API发送查询 */
        $val = WeixinApi::getMenu($mediaId);    // $val是wx菜单信息
        if ($val === false) {
            return;
        }
        $code = json_decode($val)->errcode;
        if ($code == '46003') {  // code:46003 不存在的菜单数据
            $obj['hasMenu'] = false;
            Output::instance()->object($obj);
        } else {
            $obj['hasMenu'] = true;
            Output::instance()->object($obj);
        }
    }

    /**
     * 删除所有菜单(20170711 - 没发现接口调用者)
     * 删除后修改了数据表的发布状态
     *
     * @param int $mediaId
     */
    public function delAllMenu($mediaId = 0)
    {
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }
        $customerId = Session::$user["customerId"];
        $groupmenu = D("user_group_menu");
        $result = WeixinApi::deleteMenu($mediaId);
        $result = json_decode($result, true);
        if ($result['errcode']) {
            Output::instance()->resultCode(code_weixin_error, NULL, $result['errcode']);
            return;
        } else {
            $data['isRelease'] = 0;
            $data['updateTime'] = date('Y-m-d H:i:s');
            $delResult = $groupmenu->where('1<2')->save($data);
            if ($delResult !== false) {
                Output::instance()->resultCode();
            } else {
                Output::instance()->resultCode(code_system_error);
            }
        }
    }

    /**
     * 删除所有菜单(20170711 - 没发现接口调用者)
     * 仅删除, 并没做啥修改
     */
    public function delete($mediaId = 0)
    {
        $retVal = Session::init();
        if (!$retVal) {
            Output::instance()->resultCode(code_access_denied);
            return;
        }
        $result = $this->deleteMenu($mediaId);
        if (!$result) {
            return;
        }

        Output::instance()->resultCode(code_success);
    }

    /*
    |--------------------------------------------------------------------------
    |                           以下为该类私有方法
    |--------------------------------------------------------------------------
    */

    /**
     * 把关键字菜单存到wx_X_menu里
     * 私有方法, 内部调用
     *
     * @param $menu     菜单
     */
    private function saveMenuToDb($menu) {
        // save menu to local db
        $MenuModel = M('menu');
        $MenuModel->execute('truncate table __TABLE__');

        // 处理数据
        $menuObj = json_decode($menu);
        $btns = $menuObj->button;
        foreach ($btns as $button) {    // 循环菜单对象
            if ($button->sub_button) {      // 如果是子菜单
                foreach ($button->sub_button as $subButton) {   // 遍历子菜单的btn
                    if (isset($subButton->keyword)) {
                        $MenuModel->create();
                        $MenuModel->eventKey = $subButton->key;
                        $MenuModel->keyword = $subButton->keyword;
                        $MenuModel->add(); // 根据条件保存修改的数据
                    }
                }
            } else {                        // 如果是主菜单
                if (isset($button->keyword)) {
                    $MenuModel->create();
                    $MenuModel->eventKey = $button->key;
                    $MenuModel->keyword = $button->keyword;
                    $MenuModel->add(); // 根据条件保存修改的数据
                }
            }
        }
    }

    /**
     * 菜单信息存入素材表
     *
     * @param      $menu
     * @param null $materialId
     * @return mixed|null
     */
    private function saveMenuToMaterial($menu, $materialId = null)
    {
        /** 1. 处理数据 */
        $xml = "<xml>\r\n<json>\r\n<![CDATA[" . $menu . "]]>\r\n</json></xml>";
        $date = date('Y-m-d H:i:s');
        $data['name'] = menu_name;
        $data['module'] = menu_module;
        $data['xml'] = $xml;
        $data['updateTime'] = $date;
        $data['deleted'] = 0;

        /** 2. 插入数据 */
        // 初始化模型
        $MaterialModel = D("Material");
        $material = $MaterialModel->where("id=$materialId")->find();
        if (!$material) {   // 如果没有该$materialId对应的$material, 则新增
            $id = $MaterialModel->add($data);
        } else {    // 否则修改
            $id = $materialId;
            $MaterialModel->where("id=$id")->save($data);
        }

        /** 3. 最终返回这条菜单的id */
        return $id;
    }

    /**
     * 查询这个菜单的素材内容
     *
     * @param $id
     * @return mixed|string
     */
    private function getMenu($id)
    {
        // 实例化数据Model
        $MaterialModel = D("Material");
        $condition['id'] = array('eq', $id);
        $material = $MaterialModel->where($condition)->find();
        if ($material) {
            $materialObj = simplexml_load_string($material['xml'], 'SimpleXMLElement', LIBXML_NOCDATA);
            $menu = (String)$materialObj->json;
            $menu = json_decode($menu);
            return $menu;
        }
    }

    /**
     * 删除菜单时, 软删除该个菜单的素材信息
     *
     * @param $materialId
     */
    private function deleteMenuMaterial($materialId) {
        $MaterialModel = D("Material");
        $data = ['deleted' => 1, 'updateTime' => date('Y-m-d H:i:s')];
        $MaterialModel->where("id='". $materialId ."'")->save($data);
    }

    /**
     * 删除所有已发布的菜单
     *
     * @param int $mediaId
     */
    private function deleteMenu($mediaId = 0) {
        $result = WeixinApi::deleteMenu($mediaId);
        if (!$result) {
            return false;
        }

        //$MenuModel = M('menu');
        //$MenuModel->execute('truncate table __TABLE__');

        //$this->deleteMenuMaterial();
        return true;
    }

    /**
     * 获取登录者姓名
     */
    private function getLoginName()
    {
        $cuid = Session::$user['cuid'];
        $customerId = Session::$user['custoerId'];

        Session::switchCustomer(0);
        $Model_CustomerUser = M('customer_user');
        Session::switchCustomer($customerId);

        $loginName = $Model_CustomerUser->where(['id' => $cuid, 'deleted' => 0])->getField('loginName');

        return $loginName;
    }

}
